package com.boco.blch.analysiser.compliance.HW.manager;

import java.util.regex.Pattern;

import com.boco.blch.analysiser.compliance.ComplianceResolved;
import com.boco.blch.analysiser.util.PortRangeUtil;

/**
 * HDFS 服务启动最小化安全基线要求项(端口：25000-25049)   【控制节点】+【数据节点】
 * 【控制节点】
 * 1、执行 ps -ef|grep -v grep |grep NameNode|awk '{print $2}'，获取到 进程号 
 * 执行 ps -ef|grep -v grep |grep JournalNode|awk '{print $2}'，获取到 进程号
 * 2、netstat -anp |grep 进程号        获得端口信息
 * 如：
 * 		tcp  0 0 10.113.4.234:8090 10.113.4.222 9090 LISTEN  11330/java
 * 		tcp  0 0 10.113.4.222:9090 10.113.4.234 8090 LISTEN  11330/java
 * 3、使用通信矩阵里面，该进程对应的端口号，查看 输出；
 * 		如果通信矩阵里面的端口，是源IP的端口，则合规；
 *      如果通信矩阵里面的端口，是目的IP的端口，则合规；
 *      如果通信矩阵的端口，不在源IP和目的IP端口，则不合规；
 *   
 *      
 *【数据节点】
 * 1、执行 ps -ef|grep -v grep |grep NameNode|awk '{print $2}'，获取到 进程号 
 * 执行 ps -ef|grep -v grep |grep JournalNode|awk '{print $2}'，获取到 进程号
 * 2、netstat -anp |grep 进程号        获得端口信息
 * 如：
 * 		tcp  0 0 10.113.4.234:8090 10.113.4.222 9090 LISTEN  11330/java
 * 		tcp  0 0 10.113.4.222:9090 10.113.4.234 8090 LISTEN  11330/java
 * 3、使用通信矩阵里面，该进程对应的端口号，查看 输出；
 * 		如果通信矩阵里面的端口，是源IP的端口，则合规；
 *      如果通信矩阵里面的端口，是目的IP的端口，则合规；
 *      如果通信矩阵的端口，不在源IP和目的IP端口，则不合规； 
 * @author admin
 *
 */
public class BOCO_Hdfs_VisitCtl_ServiceStartMin implements ComplianceResolved {
	
	private final static String name="hdfs";
	//private final static Common com = new Common();

	@Override
	public int realEchoResolved(String echoResult) {
		//return com.getServiceStartMin(echoResult, name);
		
		int result = UNKNOWN;//进程不存在为待定
		
		if(echoResult.contains(NoPermission1) || echoResult.contains(NoPermission2) || echoResult.contains(NoPermission3)){
			result =  FAILED;
		}else if(echoResult != null && echoResult.trim().length() > 0){
			String []str1 = echoResult.split("\n");//根据\n拆分为数组
			if(str1!=null && str1.length>0){
				for (int i = 0; i < str1.length; i++) {
					String []str2 = str1[i].split(":");//根据：拆分为数组
					for (int j = 0; j < str2.length; j++) {
						String port = str2[j].trim();
						if(port.indexOf("  ") != -1){
							port = port.substring(0, port.indexOf("  "));
						}
						System.out.println("*************---:"+port);
						//判断数字 正则
						Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");  //[0-9]*
						if(port != null && port.length()>0){
							boolean flag = pattern.matcher(port).matches();
							if(flag){
								//判断待测端口号是否在端口矩阵中
								boolean resultFlag = PortRangeUtil.inRange(name, Integer.parseInt(port));
								System.out.println("resultFlag----:"+resultFlag);  
								if(!resultFlag){//待测端口不在端口矩阵中
									result = FAILED;
									break;
								}else{
									result = SUCCESS;
								}
								//System.out.println("-----------------:"+(pattern.matcher(port).matches()==true?SUCCESS:FAILED));
							}
						}
					}
					if(result == FAILED){
						break;
					}
					
				}
			}
		}
		return result;
	}
	
	

//		
//		if(echoResult != null && echoResult.trim().length() > 0){
//			String []str1 = echoResult.split("\n");//根据\n拆分为数组
//			if(str1!=null && str1.length>0){
//				for (int i = 0; i < str1.length; i++) {
//					String []str2 = str1[i].split(":");//根据：拆分为数组
//					for (int j = 0; j < str2.length; j++) {
//						String port = str2[j].trim();
//						System.out.println("*************---:"+port);
//						//判断数字 正则
//						Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");  //[0-9]*
//						if(port != null && port.length()>0){
//							boolean flag = pattern.matcher(port).matches();
//							if(flag){
//								//判断待测端口号是否在端口矩阵中
//								boolean resultFlag = PortRangeUtil.inRange(name, Integer.parseInt(port));
//								System.out.println("resultFlag----:"+resultFlag);  
//								if(!resultFlag){//待测端口不在端口矩阵中
//									result = FAILED;
//									break;
//								}else{
//									result = SUCCESS;
//								}
//								//System.out.println("-----------------:"+(pattern.matcher(port).matches()==true?SUCCESS:FAILED));
//							}
//						}
//					}
//					if(result == FAILED){
//						break;
//					}
//					
//				}
//			}
//		}
		
//		System.out.println("最后结果----："+result);
		

}